diff --git a/library/NGNPro/Records/EnumMappings.php b/library/NGNPro/Records/EnumMappings.php index 4d97f10..58f394f 100644 --- a/library/NGNPro/Records/EnumMappings.php +++ b/library/NGNPro/Records/EnumMappings.php @@ -1,1306 +1,1359 @@ 'Change date', 'number' => 'Number', 'tld' => 'TLD' ); var $ranges=array(); var $FieldsReadOnly=array( 'customer', 'reseller' ); var $Fields=array( 'owner' => array('type'=>'integer'), 'info' => array('type'=>'string') ); var $mapping_fields=array('id' => 'integer', 'type' => 'string', 'mapto' => 'string', 'priority' => 'integer', 'ttl' => 'integer' ); var $NAPTR_services=array( "sip" => array("service"=>"sip", "webname"=>"SIP", "schemas"=>array("sip:","sips:")), "mailto" => array("service"=>"mailto", "webname"=>"Email", "schemas"=>array("mailto:")), "web:http" => array("service"=>"web:http", "webname"=>"WEB (http)", "schemas"=>array("http://")), "web:https" => array("service"=>"web:https", "webname"=>"WEB (https)", "schemas"=>array("https://")), "x-skype:callto" => array("service"=>"x-skype:callto", "webname"=>"Skype", "schemas"=>array("callto:")), "h323" => array("service"=>"h323", "webname"=>"H323", "schemas"=>array("h323:")), "iax" => array("service"=>"iax", "webname"=>"IAX", "schemas"=>array("iax:")), "iax2" => array("service"=>"iax2", "webname"=>"IAX2", "schemas"=>array("iax2:")), "mms" => array("service"=>"mms", "webname"=>"MMS", "schemas"=>array("tel:","mailto:")), "sms" => array("service"=>"sms", "webname"=>"SMS", "schemas"=>array("tel:","mailto:")), "ems" => array("service"=>"ems", "webname"=>"EMS", "schemas"=>array("tel:","mailto:")), "im" => array("service"=>"im", "webname"=>"IM", "schemas"=>array("im:")), "npd:tel" => array("service"=>"npd+tel", "webname"=>"Portability", "schemas"=>array("tel:")), "void:mailto" => array("service"=>"void:mailto", "webname"=>"VOID(mail)", "schemas"=>array("mailto:")), "void:http" => array("service"=>"void:http", "webname"=>"VOID(http)", "schemas"=>array("http://")), "void:https" => array("service"=>"void:https", "webname"=>"VOID(https)", "schemas"=>array("https://")), "voice" => array("service"=>"voice", "webname"=>"Voice", "schemas"=>array("voice:","tel:")), "tel" => array("service"=>"tel", "webname"=>"Tel", "schemas"=>array("tel:")), "fax:tel" => array("service"=>"fax:tel", "webname"=>"Fax", "schemas"=>array("tel:")), "ifax:mailto" => array("service"=>"ifax:mailto", "webname"=>"iFax", "schemas"=>array("mailto:")), "pres" => array("service"=>"pres", "webname"=>"Presence", "schemas"=>array("pres:")), "ft:ftp" => array("service"=>"ft:ftp", "webname"=>"FTP", "schemas"=>array("ftp://")), "loc:http" => array("service"=>"loc:http", "webname"=>"GeoLocation", "schemas"=>array("http://")), "key:http" => array("service"=>"key:http", "webname"=>"Public key", "schemas"=>array("http://")), "key:https" => array("service"=>"key:https", "webname"=>"Public key (HTTPS)", "schemas"=>array("https://")) ); public function __construct($SoapEngine) { dprint("init EnumMappings"); if ($_REQUEST['range_filter']) { list($_prefix, $_tld_filter)= explode("@",$_REQUEST['range_filter']); if ($_prefix && !$_REQUEST['number_filter']) { $_number_filter=$_prefix.'%'; } else { $_number_filter=$_REQUEST['number_filter']; } } else { $_number_filter=$_REQUEST['number_filter']; $_tld_filter=trim($_REQUEST['tld_filter']); } $_number_filter=ltrim($_number_filter,'+'); $this->filters = array('number' => ltrim($_number_filter,'+'), 'tld' => $_tld_filter, 'range' => trim($_REQUEST['range_filter']), 'type' => trim($_REQUEST['type_filter']), 'mapto' => trim($_REQUEST['mapto_filter']), 'owner' => trim($_REQUEST['owner_filter']) ); parent::__construct($SoapEngine); $this->getAllowedDomains(); } function listRecords() { $this->showSeachForm(); $filter=array('number' => $this->filters['number'], 'tld' => $this->filters['tld'], 'type' => $this->filters['type'], 'mapto' => $this->filters['mapto'], 'owner' => intval($this->filters['owner']), 'customer' => intval($this->filters['customer']), 'reseller' => intval($this->filters['reseller']) ); // Range $range=array('start' => intval($this->next), 'count' => intval($this->maxrowsperpage) ); // Order if (!$this->sorting['sortBy']) $this->sorting['sortBy'] = 'changeDate'; if (!$this->sorting['sortOrder']) $this->sorting['sortOrder'] = 'DESC'; $orderBy = array('attribute' => $this->sorting['sortBy'], 'direction' => $this->sorting['sortOrder'] ); // Compose query $Query=array('filter' => $filter, 'orderBy' => $orderBy, 'range' => $range ); // Insert credetials $this->SoapEngine->soapclient->addHeader($this->SoapEngine->SoapAuth); $this->log_action('getNumbers'); // Call function $result = $this->SoapEngine->soapclient->getNumbers($Query); if ($this->checkLogSoapError($result, true)) { return false; } else { $this->rows = $result->total; if ($this->rows && $_REQUEST['action'] != 'PerformActions' && $_REQUEST['action'] != 'Delete') { $this->showActionsForm(); } print "
Range Owner | Phone number | TLD | Info | Owner | Type | Id | Map to | TTL | Change date | Actions | |
---|---|---|---|---|---|---|---|---|---|---|---|
%s | -%s.%s | -+%s | -%s | -%s | -%s | -%s | -%s | -%s | -%s | -%s | -%s | -
%s | +%s.%s | ++%s | +%s | +%s | +%s | +%s | +%s | +%s | +%s | +%s | +%s | +
- | - | - | - | - | - | %s | -%s | -%s | -%s | -%s | -%s | -
+ | + | + | + | + | + | %s | +%s | +%s | +%s | +%s | +%s | +
%s | -%s.%s | -+%s | -%s | -%s | -%s | -- | - | - | %s | -%s | -|
%s | +%s.%s | ++%s | +%s | +%s | +%s | ++ | + | + | %s | +%s | +
Please press on Confirm to confirm the delete. "; return true; } if ($dictionary['number']) { $number=$dictionary['number']; } else { $number=$this->filters['number']; } if ($dictionary['tld']) { $tld=$dictionary['tld']; } else { $tld=$this->filters['tld']; } if ($dictionary['mapto']) { $mapto=$dictionary['mapto']; } else { $mapto=$this->filters['mapto']; } if (!strlen($number) || !strlen($tld)) { print "
Error: missing ENUM number or TLD "; return false; } $enum_id=array('number' => $number, 'tld' => $tld ); $this->SoapEngine->soapclient->addHeader($this->SoapEngine->SoapAuth); $this->log_action('getNumber'); $result = $this->SoapEngine->soapclient->getNumber($enum_id); if (!(new PEAR)->isError($result)) { // the number exists and we make an update $result_new=$result; if (count($result->mappings) > 1) { foreach ($result->mappings as $_mapping) { if ($_mapping->mapto != $mapto) { $mappings_new[]=array('type' => $_mapping->type, 'mapto' => $_mapping->mapto, 'ttl' => $_mapping->ttl, 'priority' => $_mapping->priority, 'id' => $_mapping->id ); } } if (!is_array($mappings_new)) $mappings_new = array(); $result_new->mappings=$mappings_new; $function=array('commit' => array('name' => 'updateNumber', 'parameters' => array($result_new), 'logs' => array('success' => sprintf('ENUM mapping %s has been deleted',$mapto))) ); $result = $this->SoapEngine->execute($function,$this->html); if ($this->checkLogSoapError($result, true)) { return false; } else { return true; } } else { $function=array('commit' => array('name' => 'deleteNumber', 'parameters' => array($enum_id), 'logs' => array('success' => sprintf('ENUM number +%s under %s has been deleted',$number,$tld))), ); $result = $this->SoapEngine->execute($function,$this->html); if ($this->checkLogSoapError($result, true)) { return false; } else { return true; } } unset($this->filters); } else { return false; } } function showAddForm() { if ($this->selectionActive) return; //if ($this->adminonly && !$this->filters['reseller']) return; if (!count($this->ranges)) { //print "
You must create at least one ENUM range before adding ENUM numbers"; return false; } printf ("
"; } function getAllowedDomains() { // Filter $filter=array('prefix' => '', 'customer' => intval($this->filters['customer']), 'reseller' => intval($this->filters['reseller']) ); // Range $range=array('start' => 0, 'count' => 200 ); // Order $orderBy = array('attribute' => 'prefix', 'direction' => 'ASC' ); // Compose query $Query=array('filter' => $filter, 'orderBy' => $orderBy, 'range' => $range ); $this->SoapEngine->soapclient->addHeader($this->SoapEngine->SoapAuth); $this->log_action('getRanges'); $result = $this->SoapEngine->soapclient->getRanges($Query); if ($this->checkLogSoapError($result, true)) { return false; } else { foreach($result->ranges as $range) { $this->ranges[]=array('prefix' => $range->id->prefix, 'tld' => $range->id->tld, 'minDigits' => $range->minDigits, 'maxDigits' => $range->maxDigits ); if (in_array($range->id->tld,$this->allowedDomains)) continue; $this->allowedDomains[]=$range->id->tld; $seen[$range->id->tld]++; } if (!$seen[$this->SoapEngine->default_enum_tld]) { $this->allowedDomains[]=$this->SoapEngine->default_enum_tld; } } } function addRecord($dictionary=array()) { $prefix=''; if ($dictionary['range']) { list($prefix,$tld)=explode('@',trim($dictionary['range'])); $this->skipSaveProperties=true; } else if ($dictionary['tld']) { $tld = $dictionary['tld']; } else if ($_REQUEST['range']) { list($prefix,$tld)=explode('@',trim($_REQUEST['range'])); } else { $tld = trim($_REQUEST['tld']); } if ($dictionary['number']) { $number = $dictionary['number']; } else { $number = trim($_REQUEST['number']); } $number=$prefix.$number; if (!strlen($tld)) { $tld=$this->SoapEngine->default_enum_tld; } if (!strlen($tld) || !strlen($number) || !is_numeric($number)) { printf ("Error: Missing TLD or number. "); return false; } if ($dictionary['ttl']) { $ttl = intval($dictionary['ttl']); } else { $ttl = intval(trim($_REQUEST['ttl'])); } if (!$ttl) $ttl=3600; if ($dictionary['priority']) { $priority = intval($dictionary['priority']); } else { $priority = intval(trim($_REQUEST['priority'])); } if ($dictionary['owner']) { $owner = intval($dictionary['owner']); } else { $owner = intval(trim($_REQUEST['owner'])); } if ($dictionary['info']) { $info = $dictionary['info']; } else { $info = trim($_REQUEST['info']); } if (!$priority) $priority=5; $enum_id=array('number' => $number, 'tld' => $tld); if ($dictionary['mapto']) { $mapto = $dictionary['mapto']; } else { $mapto = trim($_REQUEST['mapto']); } if ($dictionary['type']) { $type = $dictionary['type']; } else { $type = trim($_REQUEST['type']); } if (preg_match("/^([a-z0-9]+:\/\/)(.*)$/i",$mapto,$m)) { $_scheme = $m[1]; $_value = $m[2]; } else if (preg_match("/^([a-z0-9]+:)(.*)$/i",$mapto,$m)) { $_scheme = $m[1]; $_value = $m[2]; } else { $_scheme = ''; $_value = $mapto; } if (!$_value) { $lastNumber=$this->getLastNumber(); foreach($lastNumber['mappings'] as $_mapping) { if ($_mapping->type == trim($type)) { if (preg_match("/^(.*)@(.*)$/",$_mapping->mapto,$m)) { $_value = $number.'@'.$m[2]; break; } } } } if (!$_scheme || !in_array($_scheme,$this->NAPTR_services[trim($type)]['schemas'])) { $_scheme=$this->NAPTR_services[trim($type)]['schemas'][0]; } $mapto=$_scheme.$_value; $enum_number=array('id' => $enum_id, 'owner' => $owner, 'info' => $info, 'mappings' => array(array('type' => $type, 'mapto' => $mapto, 'ttl' => $ttl, 'priority' => $priority ) ) ); if (!$this->skipSaveProperties=true) { $_p=array( array('name' => 'enum_numbers_last_range', 'category' => 'web', 'value' => $_REQUEST['range'], 'permission' => 'customer' ), array('name' => 'enum_numbers_last_type', 'category' => 'web', 'value' => "$type", 'permission' => 'customer' ), array('name' => 'enum_numbers_last_number', 'category' => 'web', 'value' => "$number", 'permission' => 'customer' ), array('name' => 'enum_numbers_last_ttl', 'category' => 'web', 'value' => "$ttl", 'permission' => 'customer' ) ); $this->setCustomerProperties($_p); } $this->SoapEngine->soapclient->addHeader($this->SoapEngine->SoapAuth); $this->log_action('getNumber'); $result = $this->SoapEngine->soapclient->getNumber($enum_id); if ((new PEAR)->isError($result)) { $error_msg=$result->getMessage(); $error_fault=$result->getFault(); $error_code=$result->getCode(); if ($error_fault->detail->exception->errorcode == "3002") { $function=array('commit' => array('name' => 'addNumber', 'parameters' => array($enum_number), 'logs' => array('success' => sprintf('ENUM number +%s under %s has been added',$number,$tld))) ); $result = $this->SoapEngine->execute($function,$this->html); if ($this->checkLogSoapError($result, true)) { return false; } else { return true; } } else { $log=sprintf("SOAP request error from %s: %s (%s): %s",$this->SoapEngine->SOAPurl,$error_msg, $error_fault->detail->exception->errorcode,$error_fault->detail->exception->errorstring); syslog(LOG_NOTICE, $log); return false; } } else { // the number exists and we make an update $result_new=$result; foreach ($result->mappings as $_mapping) { $mappings_new[]=array('type' => $_mapping->type, 'mapto' => $_mapping->mapto, 'ttl' => $_mapping->ttl, 'priority' => $_mapping->priority, 'id' => $_mapping->id ); if ($_mapping->mapto == $mapto) { printf ("
Info: ENUM mapping %s for number %s already exists",$mapto,$number); return $result; } } $mappings_new[]=array('type' => trim($type), 'mapto' => $mapto, 'ttl' => intval(trim($_REQUEST['ttl'])), 'priority'=> intval(trim($_REQUEST['priority'])), ); // add mapping $result_new->mappings=$mappings_new; $function=array('commit' => array('name' => 'updateNumber', 'parameters' => array($result_new), 'logs' => array('success' => sprintf('ENUM number +%s under %s has been updated',$number,$tld))) ); $result = $this->SoapEngine->execute($function,$this->html); if ($this->checkLogSoapError($result, true)) { return false; } else { return true; } } } function getRecordKeys() { // Filter $filter=array('number' => $this->filters['number'], 'tld' => $this->filters['tld'], 'type' => $this->filters['type'], 'mapto' => $this->filters['mapto'], 'owner' => intval($this->filters['owner']), 'customer' => intval($this->filters['customer']), 'reseller' => intval($this->filters['reseller']) ); // Range $range=array('start' => 0, 'count' => 1000 ); // Order if (!$this->sorting['sortBy']) $this->sorting['sortBy'] = 'changeDate'; if (!$this->sorting['sortOrder']) $this->sorting['sortOrder'] = 'DESC'; $orderBy = array('attribute' => $this->sorting['sortBy'], 'direction' => $this->sorting['sortOrder'] ); // Compose query $Query=array('filter' => $filter, 'orderBy' => $orderBy, 'range' => $range ); // Insert credetials $this->SoapEngine->soapclient->addHeader($this->SoapEngine->SoapAuth); $this->log_action('getNumberss'); // Call function $result = $this->SoapEngine->soapclient->getNumbers($Query); if ($this->checkLogSoapError($result, true)) { return false; } else { foreach ($result->numbers as $number) { $this->selectionKeys[]=array('number' => $number->id->number, 'tld' => $number->id->tld); } return true; } } function showRecord($number) { print "
";
print "Number"; print " | ";
print "Mappings"; print " | ";
print "|||||||||||||||
";
print " | ";
print "
| ";
print "|||||||||||||||
Updating number ...";
if (!$_REQUEST['number_filter'] || !$_REQUEST['tld_filter']) return;
$enumid=array('number' => $_REQUEST['number_filter'],
'tld' => $_REQUEST['tld_filter']
);
if (!$number = $this->getRecord($enumid)) {
return false;
}
$number_old=$number;
$new_mappings=array();
/*
foreach ($number->mappings as $_mapping) {
foreach (array_keys($this->mapping_fields) as $field) {
if ($this->mapping_fields[$field] == 'integer') {
$new_mapping[$field]=intval($_mapping->$field);
} else {
$new_mapping[$field]=$_mapping->$field;
}
}
$new_mappings[]=$new_mapping;
}
*/
$j=0;
while ($j< count($_REQUEST['mapping_type'])) {
$mapto = $_REQUEST['mapping_mapto'][$j];
$type = $_REQUEST['mapping_type'][$j];
$id = $_REQUEST['mapping_id'][$j];
$ttl = intval($_REQUEST['mapping_ttl'][$j]);
$priority = intval($_REQUEST['mapping_priority'][$j]);
if (!$ttl) $ttl = $this->default_ttl;
if (!$priority) $priority = $this->default_priority;
if (strlen($mapto)) {
if (preg_match("/^([a-z0-9]+:\/\/)(.*)$/i",$mapto,$m)) {
$_scheme = $m[1];
$_value = $m[2];
} else if (preg_match("/^([a-z0-9]+:)(.*)$/i",$mapto,$m)) {
$_scheme = $m[1];
$_value = $m[2];
} else {
$_scheme = '';
$_value = $mapto;
}
reset($this->NAPTR_services);
if (!$_scheme || !in_array($_scheme,$this->NAPTR_services[trim($type)]['schemas'])) {
$_scheme=$this->NAPTR_services[trim($type)]['schemas'][0];
}
$mapto=$_scheme.$_value;
$new_mappings[]=array( 'type' => $type,
'ttl' => $ttl,
'id' => intval($id),
'mapto' => $mapto,
'priority' => $priority
);
}
$j++;
}
$number->mappings=$new_mappings;
if (!is_array($number->mappings)) $number->mappings=array();
foreach (array_keys($this->Fields) as $item) {
$var_name=$item.'_form';
//printf ("
%s=%s",$var_name,$_REQUEST[$var_name]);
if ($this->Fields[$item]['type'] == 'integer') {
$number->$item = intval($_REQUEST[$var_name]);
} else {
$number->$item = trim($_REQUEST[$var_name]);
}
}
//print_r($number);
$function=array('commit' => array('name' => 'updateNumber',
'parameters' => array($number),
'logs' => array('success' => sprintf('ENUM number +%s under %s has been updated',$enumid['number'],$enumid['tld'])))
);
$result = $this->SoapEngine->execute($function,$this->html);
dprint_r($result) ;
if ($this->checkLogSoapError($result, true)) {
return false;
} else {
return true;
}
}
function showTextBeforeCustomerSelection() {
print _("Range owner");
}
}